/**
 * Copyright  (c) 2009-2013 XLab,  Org. 
 * All  rights  reserved. 
 */
package org.xlab.baseframework.dao.api;

import java.util.List;

import org.xlab.baseframework.domain.SystemCode;
import org.xlab.baseframework.exception.ObjectNotFoundException;
import org.xlab.baseframework.exception.TooManyObjectsFoundException;

/**
 * <p>
 * 系统编码表DAO接口
 * </p>
 * 
 * @author MaKuBEX Email:makubexnet@gmail.com
 * @version 1.0.0 Sep 8, 2010
 * @since 1.0.0
 * 
 */
public interface ISystemCodeDAO extends ILogicRemoveDAO<SystemCode, Long> {
	/**
	 * <p>
	 * 根据提供的代码类别寻找系统代码实体列表
	 * </p>
	 * 
	 * @param category
	 *            代码类别
	 * @return 系统代码实体列表
	 * @throws ObjectNotFoundException
	 *             如果没有找到任一结果时
	 */
	public List<SystemCode> findAllByCategory(SystemCode category)
			throws ObjectNotFoundException;

	/**
	 * <p>
	 * 根据提供的代码找到系统代码实体
	 * </p>
	 * 
	 * @param code
	 *            代码
	 * @return 系统代码实体
	 * @throws ObjectNotFoundException
	 *             当系统无法获取UniqueKey或者无法找到任一结果时
	 * @throws TooManyObjectsFoundException
	 *             当系统获取UniqueKey发现多条结果或者找到多于一条结果时
	 */
	public SystemCode findByCode(String code) throws ObjectNotFoundException,
			TooManyObjectsFoundException;

	/**
	 * <p>
	 * 查找同类型系统编码中当前使用的最大的序列
	 * </p>
	 * 
	 * @param systemCode
	 *            系统编码
	 * @return 当前编码对应的编码分类中最大的序列
	 * @throws ObjectNotFoundException
	 *             如果没有找到任何其他同一分类的序列
	 */
	public Long findMaxSequenceByCode(SystemCode systemCode)
			throws ObjectNotFoundException;
}
